package org.wzh.spring.aop.demo2;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

/**
 * @EnableAspectJAutoProxy 注解启用自动代理功能.
 * 如果在Spring中要使用XML来装配bean的话,那么需要使用Spring aop命名空间中的<aop:aspectj-autoproxy>元素.
 * 
 * 不管使用JavaConfig还是XML,AspectJ自动代理都会为使用@Aspect注解的bean创建一个代理,这个代理会围绕着所有该切面的切点所匹配的bean.
 * 这种情况下,将会为Concert bean创建一个代理,Audience类中的通知方法将会在perform()调用前后执行.
 * 
 * Spring的AspectJ自动代理仅仅使用@AspectJ作为创建切面的指导,切面依然是基于代理的.在本质上,它依然是Spring基于代理的切面.这一点非常重要,
 * 因为这意味着尽管使用的是@AdpectJ注解,但我们仍然限于代理方法的调用.如果想利用AspectJ的所有能力,我们必须在运行时使用AdpectJ并且不依赖Spring
 * 来创建基于代理的切面.
 * @author Pear
 *
 */
@Configuration
@EnableAspectJAutoProxy
@ComponentScan
public class ConcertConfig {

	@Bean
	public Audience audience() {
		return new Audience();
	}
	
	@Bean
	public AudiencePlus audiencePlus() {
		return new AudiencePlus();
	}
	
}
